﻿using Library.Collections.Generic;
using Library.Collections.Specialized;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;

namespace Library.Xml.Cascading
{
    //public enum Priority
    //{
    //    Normal,
    //    Important
    //}

    //public interface IMapPriorityWriteOnly<TKey, TValue> : IMapWriteOnly<TKey, TValue>
    //{
    //    TValue this[TKey key, Priority priority = Priority.Normal] { set; }
    //}

    public interface IMapCascadingRule<TNode, TKey, TValue>
    {
        Expression<Func<IEnumerable<TNode>, bool>> Selector { get; }
        IEnumerable<Expression<Action<IMapWriteOnly<TKey, TValue>>>> Declarations { get; }
    }

    public interface IMapCascadingRuleProcessor<TNode, TKey, TValue>
    {
        IMapCascadingReadOnly<TNode, TKey, TValue> Process(IEnumerable<IMapCascadingRule<TNode, TKey, TValue>> collection);
    }
}
